home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / gnu / include / incl98.zoo / wait.h < prev    next >
C/C++ Source or Header  |  1993-12-01  |  2KB  |  89 lines

  1. #ifndef _WAIT_H
  2. #define _WAIT_H
  3.  
  4. #ifndef _COMPILER_H
  5. #include <compiler.h>
  6. #endif
  7.  
  8. #ifndef _TYPES_H
  9. #include <types.h>
  10. #endif
  11.  
  12. #ifndef _POSIX_SOURCE
  13. #ifndef _RESOURCE_H
  14. #include <resource.h>
  15. #endif
  16. #endif /* _POSIX_SOURCE */
  17.  
  18. #ifdef __cplusplus
  19. extern "C" {
  20. #endif
  21.  
  22. struct __wait {
  23. #ifndef __MSHORT__
  24.     unsigned    junk:16;    /* padding to make it 32 bits */
  25. #endif
  26.     unsigned    retcode:8;
  27.     unsigned    coredump:1;
  28.     unsigned    termsig:7;
  29. };
  30.  
  31. union wait {
  32.     struct __wait     _w;
  33.     int        _i;
  34. };
  35.  
  36. union __waitp {
  37.     int *__wi;
  38.     union wait *__wu;
  39. };
  40. typedef union wait __union_wait_t;
  41.  
  42. /* Allow W* to get parameter in POSIX-Style (int) or BSD-Style (union wait)*/
  43. #ifdef _EXPERIMENTAL_WAIT_MACROS
  44. #define __W(x)  ({union{typeof(x) __in; __union_wait_t __out;}__wu; \
  45.         __wu.__in=(x); __wu.__out; })
  46. #define __WP    union __waitp        
  47. #else        
  48. #define __W(x)        (*(__union_wait_t *) &(x))
  49. #define __WP    int *
  50. #endif
  51.  
  52. #define w_termsig    _w.termsig
  53. #define w_stopsig    _w.retcode
  54. #define w_coredump    _w.coredump
  55. #define w_retcode    _w.retcode
  56.  
  57. /* I don't know if this next one is right or not */
  58. #define w_status    _i
  59.  
  60. #define __WSTOPPED    0177    /* fake "signal" for stopped processes */
  61.  
  62. #ifndef _POSIX_SOURCE
  63. #define WSTOPPED __WSTOPPED
  64. #endif
  65.  
  66. #define WIFSIGNALED(x)    (__W(x)._w.termsig != __WSTOPPED && __W(x)._w.termsig != 0)
  67. #define WIFSTOPPED(x)    (__W(x)._w.termsig == __WSTOPPED)
  68. #define WIFEXITED(x)    (__W(x)._w.termsig == 0)
  69. #define WIFCOREDUMPED(x) (__W(x)._w.coredump != 0)
  70.  
  71. #define WSTOPSIG(x)    (__W(x)._w.retcode)
  72. #define WTERMSIG(x)    (__W(x)._w.termsig)
  73. #define WEXITSTATUS(x)    (__W(x)._w.retcode)
  74.  
  75. #define WNOHANG        1
  76. #define WUNTRACED    2
  77.  
  78. __EXTERN pid_t wait    __PROTO((__WP status));
  79. #ifndef _POSIX_SOURCE
  80. __EXTERN pid_t wait3    __PROTO((union wait *status, int mode, struct rusage *rusage));
  81. #endif /* _POSIX_SOURCE */
  82. __EXTERN pid_t waitpid    __PROTO((pid_t pid, __WP status, int options));
  83.  
  84. #ifdef __cplusplus
  85. }
  86. #endif
  87.  
  88. #endif
  89.